package 动态规划;

public class 打家劫舍 {
    //动态规划思想 先确定下标的含义 dp[i]表示要偷或者不偷

    public int rob(int[] nums) {
        if (nums == null || nums.length == 0) return 0;
        if (nums.length == 1) return nums[0];
        //数组初始化
        int[] dp = new int[nums.length];
        //这里的dp[1]的初始化是因为如果1比0大的话那就是要去偷1的 所以取他们的最大值
        dp[0] = nums[0];
        dp[1] = Math.max(dp[0],nums[1]);
        for (int i = 2; i < nums.length; i++) {
            //就是一个dp[i]是偷还是不偷 偷的话就只能用前隔着一个来偷 不偷的话就是上一个
            dp[i] = Math.max(dp[i-2]+nums[i],dp[i-1]);
        }
        return dp[nums.length-1];
    }


}
